package epul.bdav;

import java.util.ArrayList;
import java.util.Collection;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlID;
import javax.xml.bind.annotation.XmlTransient;

/**
 *
 * @author ecoquery
 */
@Entity
public class Membre{

    /**
     * Spécifie la clé primaire de l'entité
     */
    @Id
    /**
     * Spécifie la stratégie d'attribution de clé primaire de l'entité
     * Ici la génération est de type SEQUENCE dont le nom est "LIVRE_GEN"
     */
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "MEMBRE_GEN")
    /**
     * Le générateur de clé primaire spécifié avec GeneratedValue
     * La portée du nom de generateur est globale à tout type de generateur dans persistence
     * Ici le nom de la séquence est "livre_seq"
     */
    @SequenceGenerator(name = "MEMBRE_GEN", sequenceName = "membre_seq", allocationSize=1)
    @XmlTransient // l'id sera transformé en String
    private int id;
    /**
     * Plusieurs éditeur peuvent correspondrent à un membre
     */
    @OneToMany(mappedBy="editeur")
    @XmlTransient
    private Collection<Livre> livres = new ArrayList<Livre>();
    
    @Column(name="nom")
    @XmlElement(name="nom")
    private String nom;

    @Column(name="email")
    @XmlElement(name="email")
    private String email;

   public Membre() {
    }

    @XmlTransient
    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @XmlTransient   
    public int getId() {
        return id;
    }

    // Ajouté pour gérer les identifiants hors des ORMs
    public void setId(int id) {
        this.id = id;
    }

    @XmlTransient
    public Collection<Livre> getLivres() {
        return livres;
    }

     @XmlTransient
    public String getNom() {
        return nom;
    }

    public void setNom(String nom) {
        this.nom = nom;
    }

    // Id sous forme de chaine de caractères
    @XmlAttribute(name="id")
    @XmlID
    private String getStringId() {
        return String.valueOf(id);
    }

    private void setStringId(String newId) {
        id = Integer.parseInt(newId);
    }
}